/**
 *promise构造函数接收一个函数参数，该函数的两个参数分别是resolve和reject
 * 如果异步操作成功，则用 resolve 方法将 Promise 对象的状态，从「未完成」变为「成功」（即从 pending 变为 resolved）；
 * 如果异步操作失败，则用 reject 方法将 Promise 对象的状态，从「未完成」变为「失败」（即从 pending 变为 rejected）。
 * @param ready
 * @returns {Promise}
 */
'use strict'
//实例一
function testPromise(ready) {
    return new Promise(function (resolve, reject) {
        if (ready) {
            resolve('Hello World');
        } else {
            reject('No thanks');
        }
    })
};
/**
 * then方法的第一个参数是Resolved状态的回调函数，第二个参数（可选）是Rejected状态的回调函数。
 *
 */
testPromise(true).then(function (massage) {
    console.log(massage);
}, function (error) {
    console.log(error);
});

//实例二：用Promise对象实现Ajax操作
var getJson = function (url) {
    var promise = new Promise(function (resolve, reject) {
        var client = new XMLHttpRequest();
        client.open('Get', url);
        client.onreadystatechange = handler;
        client.responseType = 'json';
        client.setRequestHeader('Accept', 'application/json');
        client.send();

        function handler() {
            if (this.status == 200) {
                resolve(this.response);
            } else {
                reject(new Error(this.statusText));
            };
        };
    });
    return promise;
};

getJson('data.json').then(function (json) {
    console.log('contents'+json);
}, function (error) {
    console.log('出错了'+error);
})


